package com.soulapp.data

import android.content.Context
import com.highcapable.yukihookapi.hook.factory.prefs
import com.highcapable.yukihookapi.hook.xposed.prefs.YukiHookPrefsBridge
import com.highcapable.yukihookapi.hook.xposed.prefs.data.PrefsData

object ConfigData {
    private var prefs: YukiHookPrefsBridge? = null

    // 去除开屏广告
    val limitAdvert = PrefsData("limit_advert", false)

    // 信息可随时撤回
    val canRecall = PrefsData("can_recall", false)

    // 开启聊天气泡
    val chatBubble = PrefsData("chat_bubble", false)

    // 无水印下载视频图片
    val watermark = PrefsData("watermark", false)

    // 解除聊天送礼物
    val limitChat = PrefsData("limit_chat", false)

    // 解除阅后即焚限制
    val limitSnapChat = PrefsData("limit_snap_chat", false)

    // 修改瞬间匹配年龄
    val momentAge = PrefsData("moment_age", false)
    val momentMinAge = PrefsData("moment_min_age", 18)
    val momentMaxAge = PrefsData("moment_max_age", 50)

    // 禁止自动更新
    val autoUpdate = PrefsData("auto_update", false)

    // 解除社交能力限制
    val limitSociety = PrefsData("limit_society", false)

    // 解除截图限制
    val limitCapture = PrefsData("limit_capture", false)

    // 自定义金币(本地)
    val goldCoin = PrefsData("gold_coin", false)

    // 自定义关注被关注数(本地)
    val follow = PrefsData("follow", false)
    val followNum = PrefsData("follow_num", "")
    val followedNum = PrefsData("followed_num", "")

    // 骰子游戏
    val diceRockGame = PrefsData("dice_rock_game", false)
    val diceGameValue = PrefsData("dice_game_value", 0)
    val rockGameValue = PrefsData("rock_game_value", 0)
    // 禁止消息回执
    val limitMsg = PrefsData("limit_msg", false)
    // 图片禁止销毁
    val snapImage = PrefsData("snap_mage", false)

    val showToast = PrefsData("show_toast", false)

    fun init(context: Context) {
        prefs = context.applicationContext.prefs(name = "soul_hook_config").native()
    }

    /**
     * 读取 [YukiHookPrefsBridge]
     * @param key 键值名称
     * @param value 键值内容
     * @return [Boolean]
     */
    fun getBoolean(key: PrefsData<Boolean>, value: Boolean = false) = prefs?.get(key, value) ?: value

    /**
     * 存入 [YukiHookPrefsBridge]
     * @param key 键值名称
     * @param value 键值内容
     */
    fun putBoolean(key: PrefsData<Boolean>, value: Boolean = false) = prefs?.edit { put(key, value) }

    /**
     * 读取 [YukiHookPrefsBridge]
     * @param key 键值名称
     * @param value 键值内容
     * @return [Int]
     */
    fun getInt(key: PrefsData<Int>, value: Int = 0) = prefs?.get(key, value) ?: value

    /**
     * 存入 [YukiHookPrefsBridge]
     * @param key 键值名称
     * @param value 键值内容
     */
    fun putInt(key: PrefsData<Int>, value: Int = 0) = prefs?.edit { put(key, value) }

    /**
     * 读取 [YukiHookPrefsBridge]
     * @param key 键值名称
     * @param value 键值内容
     * @return [Int]
     */
    fun getString(key: PrefsData<String>, value: String = "") = prefs?.get(key, value) ?: value

    /**
     * 存入 [YukiHookPrefsBridge]
     * @param key 键值名称
     * @param value 键值内容
     */
    fun putString(key: PrefsData<String>, value: String = "") = prefs?.edit { put(key, value) }
}